package io.github.wslxm.springbootplus2.core.utils;


import java.util.ArrayList;
import java.util.List;

/**
 * 批量获取数据
 * @author 王松
 * @mail 1720696548@qq.com
 * @date 2024/7/31 9:55 
 */
public class XjPageUtil {


    /**
     * 同步执行分批处理任务
     *
     * @param list       要处理的数据列表
     * @param batchSize  每批处理的数据量
     * @param processor  处理每批数据的处理器
     */
    public static <T> void execute(List<T> list, int batchSize, BatchProcessor<T> processor) {
        if (list == null || processor == null) {
            throw new IllegalArgumentException("List and processor cannot be null.");
        }
        List<List<T>> batches = splitList(list, batchSize);
        for (int i = 0; i < batches.size(); i++) {
            processor.process(batches.get(i), i);
        }
    }

    /**
     * 将列表分割成多个子列表
     *
     * @param list       原始列表
     * @param batchSize  子列表大小
     * @return 分割后的子列表集合
     */
    private static <T> List<List<T>> splitList(List<T> list, int batchSize) {
        List<List<T>> result = new ArrayList<>();
        for (int i = 0; i < list.size(); i += batchSize) {
            result.add(new ArrayList<>(list.subList(i, Math.min(i + batchSize, list.size()))));
        }
        return result;
    }

    @FunctionalInterface
    public interface BatchProcessor<T> {
        void process(List<T> batch, int index);
    }
}
